#!/usr/bin/env python3
"""
数据库重置脚本
用于重新创建数据库表结构，清除所有数据
"""

import os
import sys
from pathlib import Path

# 添加项目根目录到Python路径
project_root = Path(__file__).parent.parent
sys.path.insert(0, str(project_root))

from app.database import engine, SQLALCHEMY_DATABASE_URL
from app.models import Base

def reset_database():
    """
    重置数据库：删除现有数据库文件并重新创建表结构
    """
    # 从URL中提取数据库文件路径
    db_path = SQLALCHEMY_DATABASE_URL.replace('sqlite:///', '')
    
    print(f"数据库路径: {db_path}")
    
    # 确保数据目录存在
    data_dir = os.path.dirname(db_path)
    if not os.path.exists(data_dir):
        print(f"创建数据目录: {data_dir}")
        os.makedirs(data_dir, exist_ok=True)
    
    # 删除现有数据库文件
    if os.path.exists(db_path):
        print(f"删除现有数据库文件: {db_path}")
        os.remove(db_path)
    else:
        print("数据库文件不存在，将创建新的数据库")
    
    # 创建所有表
    print("创建数据库表结构...")
    Base.metadata.create_all(bind=engine)
    
    print("✅ 数据库重置完成！")
    print(f"数据库文件位置: {db_path}")
    
def backup_database():
    """
    备份当前数据库
    """
    from datetime import datetime
    
    # 从URL中提取数据库文件路径
    db_path = SQLALCHEMY_DATABASE_URL.replace('sqlite:///', '')
    
    if not os.path.exists(db_path):
        print("数据库文件不存在，无需备份")
        return None
    
    # 生成备份文件名
    timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
    backup_path = f"{db_path}.backup_{timestamp}"
    
    # 复制数据库文件
    import shutil
    shutil.copy2(db_path, backup_path)
    
    print(f"✅ 数据库已备份到: {backup_path}")
    return backup_path

def main():
    """
    主函数：提供交互式选择
    """
    print("=== 数据库管理工具 ===")
    print("1. 重置数据库（删除所有数据）")
    print("2. 备份数据库")
    print("3. 重置前先备份")
    print("4. 退出")
    
    while True:
        choice = input("\n请选择操作 (1-4): ").strip()
        
        if choice == '1':
            confirm = input("⚠️  警告：此操作将删除所有数据！确认继续？(y/N): ").strip().lower()
            if confirm in ['y', 'yes']:
                reset_database()
            else:
                print("操作已取消")
            break
            
        elif choice == '2':
            backup_database()
            break
            
        elif choice == '3':
            backup_path = backup_database()
            if backup_path:
                confirm = input("数据库已备份，确认重置？(y/N): ").strip().lower()
                if confirm in ['y', 'yes']:
                    reset_database()
                else:
                    print("重置操作已取消")
            break
            
        elif choice == '4':
            print("退出")
            break
            
        else:
            print("无效选择，请重新输入")

if __name__ == "__main__":
    main()